<?php
use \JPush\Client;

require_once "config.php";
require_once('./jpush/autoload.php');//引入你的 autoload 文件


/**
 * 微信支付
 */
class Sms
{//类定义开始

    /**
     * 数组转为xml
     * @param $arr
     * @return string
     */
    private function arrayToXml($arr)
    {
        $xml = "<xml>";
        foreach ($arr as $key => $val) {
            if (is_numeric($val)) {
                $xml .= "<" . $key . ">" . $val . "</" . $key . ">";
            } else {
                $xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
            }
        }
        $xml .= "</xml>";
        return $xml;
    }

    /**
     * xml转为数组
     * @param $xml
     * @return mixed
     */
    public function xmlToArray($xml)
    {
        return json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
    }


    /**
     * POST提交
     * @param string $data 提交的数据
     * @param string $url 地址
     * @param int $second 超时时间
     * @return bool|mixed
     */
    public function curl_POST($data, $url, $second = 30)
    {
        //初始化curl
        $ch = curl_init();
        //设置超时
        curl_setopt($ch, CURLOPT_TIMEOUT, $second);
        //这里设置代理，如果有的话
        //curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');
        //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        //设置header
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        //要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        //post提交方式
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        //运行curl
        $res = curl_exec($ch);
        //返回结果
        if ($res) {
            curl_close($ch);
            return $res;
        } else {
            $error = curl_errno($ch);
            echo "curl出错，错误码:$error" . "<br>";
            curl_close($ch);
            return false;
        }
    }

    //需要使用证书的请求
    private function postXmlSSLCurl($data, $url, $second = 30)
    {
        $ch = curl_init();
        //超时时间
        curl_setopt($ch, CURLOPT_TIMEOUT, $second);
        //这里设置代理，如果有的话
        //curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');
        //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        //设置header
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        //要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        //设置证书
        //使用证书：cert 与 key 分别属于两个.pem文件
        //默认格式为PEM，可以注释
        curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
        curl_setopt($ch, CURLOPT_SSLCERT, $this->cert_file . 'apiclient_cert.pem');
        //默认格式为PEM，可以注释
        curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
        curl_setopt($ch, CURLOPT_SSLKEY, $this->cert_file . 'apiclient_key.pem');
        //post提交方式
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        $res = curl_exec($ch);
        //返回结果
        if ($res) {
            curl_close($ch);
            return $res;
        } else {

        }
        $error = curl_errno($ch);
        echo "curl出错，错误码:$error" . "<br>";
        curl_close($ch);
        return false;
    }
}


class Modelsend
{

    /**
     * [protected description]微信公众号appid
     * @var [type]
     */
    protected $appid = "wx16320d7479a5774c";

    /**
     * [protected description]微信公众号appsecret
     * @var [type]
     */
    protected $appsecret = "e111c965e8d4ba6a2ff1a99724f6d573";


    //获得全局access_token
    public function get_token()
    {//如果已经存在直接返回access_token
        //if($_SESSION['access_token'] && $_SESSION['expire_time']>time()){
        //return $_SESSION['access_token'];
        //}else{
//        //1.请求url地址
//        $appid = APPID;//appid
//        $appsecret =  APPSECRET;//appsecret
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $this->appid . "&secret=" . $this->appsecret;//请求地址
        //2初始化curl请求
        $ch = curl_init();
        //3.配置请求参数
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在
        curl_setopt($ch, CURLOPT_URL, $url);//请求
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不直接输出数据
        //4.开始请求
        $res = curl_exec($ch);//获取请求结果
        if (curl_errno($ch)) {
            var_dump(curl_error($ch));//打印错误信息
        }
        //5.关闭curl
        curl_close($ch);
        $arr = json_decode($res, true);//将结果转为数组
        //$_SESSION['access_token']=$arr['access_token'];　　//将access_token存入session中，可以不存，每次都获得新的token
        //$_SESSION['expire_time']=time()+7200;
        return $arr['access_token'];
        //}
    }

    //推送模板信息    参数：发送给谁的openid,客户姓名，客户电话，推荐楼盘（参数自定）
    function sendMessage($openid, $jump_url, $way)
    {
        //获取全局token
        $token = $this->get_token();
        $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" . $token;//模板信息请求地址
        //发送的模板信息(微信要求json格式，这里为数组（方便添加变量）格式，然后转为json)
        $post_data = array(
            "touser" => $openid,//推送给谁,openid
            "template_id" => "YH_s1ZKdUPCZ15xJRV_JjQm38S89-Wo632Z5BV0Egms",//微信后台的模板信息id
            "url" => $jump_url,//下面为预约看房模板示例
            "data" => array(
                "first" => array(
                    "value" => "您有新的" . $way . "通话请求，请点击查看！",
                    "color" => "#173177"
                ),
                "keyword1" => array(
                    "value" => date('Y-m-d H:i:s'),//传的变量
                    "color" => "#173177"
                ),
                "keyword2" => array(
                    "value" => $way . '通话请求',
                    "color" => "#173177"
                ),
                "remark" => array(
                    "value" => "请点击该条信息或进入5P8个人中心聊天室！",
                    "color" => "#173177"
                ),
            )
        );
        //将上面的数组数据转为json格式
        $post_data = json_encode($post_data);
        //发送数据，post方式<br>　　　　　　　　　//配置curl请求
        $ch = curl_init();//创建curl请求
        curl_setopt($ch, CURLOPT_URL, $url); //设置发送数据的网址
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设置有返回值，0，直接显示
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);//禁用证书验证
        curl_setopt($ch, CURLOPT_POST, 1);//post方法请求
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);//post请求发送的数据包
        //接收执行返回的数据
        $data = curl_exec($ch);
        //关闭句柄
        curl_close($ch);
        $data = json_decode($data, true); //将json数据转成数组
        return $data;
    }

    //获取模板信息-行业信息（参考，示例未使用）
    function getHangye()
    {
        //用户同意授权后，会传过来一个code
        $token = $this->get_token();
        $url = "https://api.weixin.qq.com/cgi-bin/template/get_industry?access_token=" . $token;
        //请求token，get方式
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        $data = curl_exec($ch);
        curl_close($ch);
        $data = json_decode($data, true); //将json数据转成数组
        //return $data["access_token"];
        return $data;
    }
}

//极光 通知
class JpushService
{
    protected $AppKey;
    protected $MasterSecret;

    function __construct()
    {

        $this->AppKey = '5d3aab0ec2a3cdf6cc3272fb';
        $this->MasterSecret = '34e1899b273ea35fbcf61f56';
    }

    //极光推送 单用户
    public function push($c_type, $data, $user)
    {
        $andoreArray = [];
        foreach ($user as $k => $v) {
            if ($v['registration_id']) {
                $andoreArray[] = $v['registration_id'];
            }
        }
        if (count($andoreArray) > 0) {
            $res = $this->push_one($c_type, $data, $andoreArray);
        }
        return $res;
    }

    //简单的 极光 通知推送
    public function push_one($c_type, $data, $andoreArray)
    {

        $client = new \JPush\Client($this->AppKey, $this->MasterSecret);
        $push_payload = $client->push()
            ->setPlatform('android', 'ios') //推送平台设置 当前支持 Android, iOS, Windows Phone 三个平台的推送。其关键字分别为："android", "ios", "winphone"。  推送到所有平台：使用 all
            ->addRegistrationId($andoreArray)//设备标识 多个注册 ID 之间是 OR 关系，即取并集。
//            ->addAllAudience()
            // 通知内容体。是被推送到客户端的内容
            // ->addAlias('alias') //别名推送 用别名来标识一个用户
            // ->addTag(array('tag1', 'tag2')) //标签推送  多个标签之间是 AND 关系，即取交集 。 一次推送最多 20 个。
            ->setNotificationAlert($data['title'])
            ->iosNotification($data['content'], array(
                'sound' => 'sound.caf',//ios 语音播放地址配置
//                'c_type' => $c_type,
                // 'badge' => '+1',
                // 'content-available' => true,
                // 'mutable-content' => true,
                'category' => 'jiguang',
                'extras' => array(
                    'c_type' => $c_type,
                ),
            ))
            ->androidNotification($data['content'], array(
                'title' => $data['title'],//标题
//                'c_type' => $c_type,
                'extras' => array(
                    'c_type' => $c_type,
                ),
            ))
            //  可选参数 下面参数都是选填 根据自己的需要 进行选择 可去掉
            ->options(array(
                'sendno' => 123456,//推送序号 纯粹用来作为 API 调用标识
                'time_to_live' => 86400,//离线消息保留时长(秒) 默认 86400 （1 天），最长 10 天。设置为 0 表示不保留离线消息，只有推送当前在线的用户可以收到。

                // apns_production: 表示APNs是否生产环境，
                // True 表示推送生产环境，False 表示要推送开发环境；如果不指定则默认为推送开发环境

                'apns_production' => true,
                // big_push_duration: 表示定速推送时长(分钟)，又名缓慢推送，把原本尽可能快的推送速度，降低下来，
                // 给定的 n 分钟内，均匀地向这次推送的目标用户推送。最大值为1400.未设置则不是定速推送
                // 这里设置为 1 仅作为示例
//                'big_push_duration' => 1000
            ));
        try {
            $response = $push_payload->send();
            return $response;
        } catch (\JPush\Exceptions\APIConnectionException $e) {
            // try something here
            print $e;
        } catch (\JPush\Exceptions\APIRequestException $e) {
            // try something here
            print $e;
        }
    }
}


$class = new Sms();
$JpushService = new JpushService();

$room_num = $_POST['room_num'];
$phone = $_POST['cellphone'];
$openid = $_POST['openid'];
$type = $_POST['type'];

// $url = "http://sms.106jiekou.com/utf8/sms.aspx";
// $param = array(
//     'account' => 'sz1jsd',
//     'password' => 'j1sd309930x3y',
//     'mobile' => $phone,
// //    'content' => '您的订单编码：888888。如需帮助请联系客服。',
//     'content' => '您的订单编码：' . $room_num . '。如需帮助请联系客服。',
// );
// $res = $class->curl_POST($param, $url, $second = 30);
//极光推送流程
switch ($type) {
    case 0:
        $c_type_content = '音频';
        break;
    case 1:
        $c_type_content = '视频';
        break;

}
$data = array(
    'title' => '有新的' . $c_type_content . '通话请求···',
    'content' => '点击通知进入聊天室',
//            'name' => $row_member[0]['username'],
//            'uid' => $shop_id,
//            'c_type' => $c_type
);
$row_sql = $mysql->query("select * from dyspw_member where id = ". substr($room_num, 2));
$row_member = $row_sql->fetch_all(MYSQLI_ASSOC);
if (empty($row_member[0]['jiguang_id'])) {
    $redult['code'] = '500';
    $redult['info'] = '用户极光id未定义';
    exit(json_encode($redult));
}
$arr = array();
array_push($arr, array('registration_id' => $row_member[0]['jiguang_id']));

$result = $JpushService->push($type, $data, $arr);

//发送模板消息流程
$send = new Modelsend();
$jump_url = "https://5p8.fyh5p8.com/xiaochengxu/member.php";//测试域名
//$jump_url = "http://www.5pai8.com/xiaochengxu/member.php";//正式域名
switch ($type) {
    case 0:
        $way = '视频';
        break;
    case 1:
        $way = '音频';
        break;
    default:
        $way = '';
        break;
}
$res = $send->sendMessage($openid, $jump_url, $way);
